#Boa:Frame:Recargos

import wx
import wx.grid
import consultasBD
import utiles
from decimal import Decimal

def create(parent):
    return Recargos(parent)

[wxID_RECARGOS, wxID_RECARGOSBUTTON1, wxID_RECARGOSBUTTON2, 
 wxID_RECARGOSBUTTON3, wxID_RECARGOSBUTTON4, wxID_RECARGOSBUTTON5, 
 wxID_RECARGOSBUTTON6, wxID_RECARGOSBUTTON7, wxID_RECARGOSCHOICE1, 
 wxID_RECARGOSCOMBOBOX1, wxID_RECARGOSCOMBOBOX2, wxID_RECARGOSCOMBOBOX3, 
 wxID_RECARGOSDATEPICKERCTRL1, wxID_RECARGOSDATEPICKERCTRL2, 
 wxID_RECARGOSGRID1, wxID_RECARGOSPANEL1, wxID_RECARGOSRADIOBUTTON1, 
 wxID_RECARGOSRADIOBUTTON2, wxID_RECARGOSSTATICTEXT1, 
 wxID_RECARGOSSTATICTEXT10, wxID_RECARGOSSTATICTEXT11, 
 wxID_RECARGOSSTATICTEXT12, wxID_RECARGOSSTATICTEXT13, 
 wxID_RECARGOSSTATICTEXT14, wxID_RECARGOSSTATICTEXT15, 
 wxID_RECARGOSSTATICTEXT16, wxID_RECARGOSSTATICTEXT17, 
 wxID_RECARGOSSTATICTEXT2, wxID_RECARGOSSTATICTEXT3, wxID_RECARGOSSTATICTEXT4, 
 wxID_RECARGOSSTATICTEXT5, wxID_RECARGOSSTATICTEXT6, wxID_RECARGOSSTATICTEXT7, 
 wxID_RECARGOSSTATICTEXT8, wxID_RECARGOSTEXTCTRL1, wxID_RECARGOSTEXTCTRL10, 
 wxID_RECARGOSTEXTCTRL11, wxID_RECARGOSTEXTCTRL12, wxID_RECARGOSTEXTCTRL13, 
 wxID_RECARGOSTEXTCTRL14, wxID_RECARGOSTEXTCTRL2, wxID_RECARGOSTEXTCTRL3, 
 wxID_RECARGOSTEXTCTRL4, wxID_RECARGOSTEXTCTRL9, 
] = [wx.NewId() for _init_ctrls in range(44)]

class Recargos(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_RECARGOS, name='Recargos', parent=prnt,
              pos=wx.Point(516, 70), size=wx.Size(573, 490),
              style=wx.DEFAULT_FRAME_STYLE, title='Recargos / Descuentos')
        self.SetClientSize(wx.Size(565, 463))

        self.panel1 = wx.Panel(id=wxID_RECARGOSPANEL1, name='panel1',
              parent=self, pos=wx.Point(0, 0), size=wx.Size(565, 463),
              style=wx.TAB_TRAVERSAL)

        self.staticText7 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT7,
              label='Usuario', name='staticText7', parent=self.panel1,
              pos=wx.Point(168, 8), size=wx.Size(36, 13), style=0)

        self.comboBox2 = wx.ComboBox(choices=[], id=wxID_RECARGOSCOMBOBOX2,
              name='comboBox2', parent=self.panel1, pos=wx.Point(8, 24),
              size=wx.Size(152, 21), style=0, value='')
        self.comboBox2.SetLabel('')
        self.comboBox2.Bind(wx.EVT_COMBOBOX, self.OnSucuVendedoraCombobox,
              id=wxID_RECARGOSCOMBOBOX2)

        self.comboBox3 = wx.ComboBox(choices=[], id=wxID_RECARGOSCOMBOBOX3,
              name='comboBox3', parent=self.panel1, pos=wx.Point(168, 24),
              size=wx.Size(130, 21), style=0, value='')
        self.comboBox3.SetLabel('')

        self.button5 = wx.Button(id=wxID_RECARGOSBUTTON5, label='Aceptar',
              name='button5', parent=self.panel1, pos=wx.Point(312, 24),
              size=wx.Size(75, 23), style=0)
        self.button5.Bind(wx.EVT_BUTTON, self.OnAceptar1,
              id=wxID_RECARGOSBUTTON5)

        self.staticText8 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT8,
              label='Sucursal', name='staticText8', parent=self.panel1,
              pos=wx.Point(8, 8), size=wx.Size(40, 13), style=0)

        self.staticText1 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT1,
              label='Nro.de Cliente', name='staticText1', parent=self.panel1,
              pos=wx.Point(8, 56), size=wx.Size(69, 13), style=0)

        self.staticText2 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT2,
              label='Nombre', name='staticText2', parent=self.panel1,
              pos=wx.Point(80, 56), size=wx.Size(37, 13), style=0)

        self.staticText10 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT10,
              label='%', name='staticText10', parent=self.panel1,
              pos=wx.Point(72, 392), size=wx.Size(11, 13), style=0)

        self.staticText12 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT12,
              label='Nuevo monto', name='staticText12', parent=self.panel1,
              pos=wx.Point(480, 376), size=wx.Size(64, 13), style=0)

        self.staticText14 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT14,
              label='Direccion', name='staticText14', parent=self.panel1,
              pos=wx.Point(8, 96), size=wx.Size(43, 13), style=0)

        self.staticText13 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT13,
              label='Fecha operacion', name='staticText13', parent=self.panel1,
              pos=wx.Point(312, 376), size=wx.Size(79, 13), style=0)

        self.staticText15 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT15,
              label='Telefono', name='staticText15', parent=self.panel1,
              pos=wx.Point(272, 96), size=wx.Size(42, 13), style=0)

        self.staticText16 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT16,
              label='Descripcion', name='staticText16', parent=self.panel1,
              pos=wx.Point(104, 336), size=wx.Size(54, 13), style=0)

        self.staticText11 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT11,
              label='$', name='staticText11', parent=self.panel1,
              pos=wx.Point(168, 392), size=wx.Size(6, 13), style=0)

        self.staticText17 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT17,
              label='Tipo operacion', name='staticText17', parent=self.panel1,
              pos=wx.Point(16, 336), size=wx.Size(70, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_RECARGOSTEXTCTRL1,
              name='textCtrl1', parent=self.panel1, pos=wx.Point(8, 72),
              size=wx.Size(72, 21), style=0, value='')

        self.textCtrl2 = wx.TextCtrl(id=wxID_RECARGOSTEXTCTRL2,
              name='textCtrl2', parent=self.panel1, pos=wx.Point(80, 72),
              size=wx.Size(304, 21), style=0, value='')

        self.button1 = wx.Button(id=wxID_RECARGOSBUTTON1, label='Buscar',
              name='button1', parent=self.panel1, pos=wx.Point(480, 72),
              size=wx.Size(75, 24), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBuscar, id=wxID_RECARGOSBUTTON1)

        self.datePickerCtrl2 = wx.DatePickerCtrl(id=wxID_RECARGOSDATEPICKERCTRL2,
              name='datePickerCtrl2', parent=self.panel1, pos=wx.Point(480,
              136), size=wx.Size(80, 21),
              style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)
        self.datePickerCtrl2.Bind(wx.EVT_DATE_CHANGED,
              self.OnCambiaFechaProceso, id=wxID_RECARGOSDATEPICKERCTRL2)
        self.datePickerCtrl2.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)

        self.staticText4 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT4,
              label='Deuda desde....', name='staticText4', parent=self.panel1,
              pos=wx.Point(480, 120), size=wx.Size(79, 13), style=0)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_RECARGOSCOMBOBOX1,
              name='comboBox1', parent=self.panel1, pos=wx.Point(312, 312),
              size=wx.Size(152, 21), style=0, value='')
        self.comboBox1.SetLabel('')
        self.comboBox1.Bind(wx.EVT_COMBOBOX, self.OnCambiaSucursal,
              id=wxID_RECARGOSCOMBOBOX1)

        self.choice1 = wx.Choice(choices=["Recargo", "Descuento"],
              id=wxID_RECARGOSCHOICE1, name='choice1', parent=self.panel1,
              pos=wx.Point(16, 352), size=wx.Size(80, 21), style=0)

        self.textCtrl14 = wx.TextCtrl(id=wxID_RECARGOSTEXTCTRL14,
              name='textCtrl14', parent=self.panel1, pos=wx.Point(104, 352),
              size=wx.Size(360, 21), style=0, value='')

        self.radioButton1 = wx.RadioButton(id=wxID_RECARGOSRADIOBUTTON1,
              label='Porcentaje', name='radioButton1', parent=self.panel1,
              pos=wx.Point(16, 376), size=wx.Size(81, 13), style=0)
        self.radioButton1.SetValue(True)
        self.radioButton1.Enable(False)
        self.radioButton1.Bind(wx.EVT_RADIOBUTTON, self.OnRadioButton1,
              id=wxID_RECARGOSRADIOBUTTON1)

        self.radioButton2 = wx.RadioButton(id=wxID_RECARGOSRADIOBUTTON2,
              label='Monto', name='radioButton2', parent=self.panel1,
              pos=wx.Point(96, 376), size=wx.Size(81, 13), style=0)
        self.radioButton2.SetValue(False)
        self.radioButton2.Enable(False)
        self.radioButton2.Bind(wx.EVT_RADIOBUTTON, self.OnRadioButton2,
              id=wxID_RECARGOSRADIOBUTTON2)

        self.textCtrl9 = wx.TextCtrl(id=wxID_RECARGOSTEXTCTRL9,
              name='textCtrl9', parent=self.panel1, pos=wx.Point(16, 392),
              size=wx.Size(48, 21), style=0, value='')

        self.textCtrl10 = wx.TextCtrl(id=wxID_RECARGOSTEXTCTRL10,
              name='textCtrl10', parent=self.panel1, pos=wx.Point(96, 392),
              size=wx.Size(64, 21), style=0, value='')
        self.textCtrl10.SetEditable(True)

        self.button6 = wx.Button(id=wxID_RECARGOSBUTTON6, label='Calcular',
              name='button6', parent=self.panel1, pos=wx.Point(184, 392),
              size=wx.Size(72, 23), style=0)
        self.button6.Enable(False)
        self.button6.Bind(wx.EVT_BUTTON, self.OnCalcular,
              id=wxID_RECARGOSBUTTON6)

        self.datePickerCtrl1 = wx.DatePickerCtrl(id=wxID_RECARGOSDATEPICKERCTRL1,
              name='datePickerCtrl1', parent=self.panel1, pos=wx.Point(312,
              392), size=wx.Size(80, 21),
              style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)

        self.textCtrl11 = wx.TextCtrl(id=wxID_RECARGOSTEXTCTRL11,
              name='textCtrl11', parent=self.panel1, pos=wx.Point(480, 392),
              size=wx.Size(72, 21), style=0, value='')
        self.textCtrl11.SetEditable(False)

        self.textCtrl12 = wx.TextCtrl(id=wxID_RECARGOSTEXTCTRL12,
              name='textCtrl12', parent=self.panel1, pos=wx.Point(8, 112),
              size=wx.Size(264, 21), style=0, value='')
        self.textCtrl12.SetEditable(False)

        self.textCtrl13 = wx.TextCtrl(id=wxID_RECARGOSTEXTCTRL13,
              name='textCtrl13', parent=self.panel1, pos=wx.Point(272, 112),
              size=wx.Size(112, 21), style=0, value='')
        self.textCtrl13.SetEditable(False)

        self.button2 = wx.Button(id=wxID_RECARGOSBUTTON2, label='Aceptar',
              name='button2', parent=self.panel1, pos=wx.Point(392, 432),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnAceptar,
              id=wxID_RECARGOSBUTTON2)

        self.button3 = wx.Button(id=wxID_RECARGOSBUTTON3, label='Salir',
              name='button3', parent=self.panel1, pos=wx.Point(480, 432),
              size=wx.Size(75, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_RECARGOSBUTTON3)

        self.button4 = wx.Button(id=wxID_RECARGOSBUTTON4, label='Limpiar',
              name='button4', parent=self.panel1, pos=wx.Point(16, 432),
              size=wx.Size(75, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnLimpiar,
              id=wxID_RECARGOSBUTTON4)

        self.grid1 = wx.grid.Grid(id=wxID_RECARGOSGRID1, name='grid1',
              parent=self.panel1, pos=wx.Point(8, 160), size=wx.Size(552, 120),
              style=0)
        self.grid1.Bind(wx.EVT_SET_FOCUS, self.OnFocus)

        self.staticText3 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT3,
              label='Deuda sucursal', name='staticText3', parent=self.panel1,
              pos=wx.Point(480, 296), size=wx.Size(73, 13), style=0)

        self.textCtrl3 = wx.TextCtrl(id=wxID_RECARGOSTEXTCTRL3,
              name='textCtrl3', parent=self.panel1, pos=wx.Point(480, 312),
              size=wx.Size(72, 21), style=0, value='')
        self.textCtrl3.SetEditable(False)

        self.staticText5 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT5,
              label='Sucursal', name='staticText5', parent=self.panel1,
              pos=wx.Point(312, 296), size=wx.Size(40, 13), style=0)

        self.textCtrl4 = wx.TextCtrl(id=wxID_RECARGOSTEXTCTRL4,
              name='textCtrl4', parent=self.panel1, pos=wx.Point(480, 24),
              size=wx.Size(76, 21), style=0, value='')
        self.textCtrl4.SetEditable(False)

        self.staticText6 = wx.StaticText(id=wxID_RECARGOSSTATICTEXT6,
              label='Fecha', name='staticText6', parent=self.panel1,
              pos=wx.Point(480, 8), size=wx.Size(29, 13), style=0)

        self.button7 = wx.Button(id=wxID_RECARGOSBUTTON7,
              label='Historico Pagos', name='button7', parent=self.panel1,
              pos=wx.Point(184, 432), size=wx.Size(96, 23), style=0)
        self.button7.Bind(wx.EVT_BUTTON, self.OnHistoricoPagos,
              id=wxID_RECARGOSBUTTON7)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.crearGrilla()
        self.textCtrl4.SetLabel(utiles.obtenerFecha("d-m-Y"))
        self.choice1.SetSelection(0)
        self.comboSucursales()
        self.cargarComboVendedora()
        self.habilitaBloque1(True)
        self.habilitaBloque2(False)
        self.habilitaBloque3(False)
        self.comboBox2.SetFocus()

    def habilitaBloque1(self,habilitacion=True):
        self.comboBox2.Enable(habilitacion)
        self.comboBox3.Enable(habilitacion)
        self.button5.Enable(habilitacion)

    def habilitaBloque2(self,habilitacion=True):
        #segunda mitad
        self.textCtrl1.Enable(habilitacion)
        self.textCtrl2.Enable(habilitacion)
        self.button1.Enable(habilitacion)
        self.textCtrl12.Enable(habilitacion)
        self.textCtrl13.Enable(habilitacion)
        self.datePickerCtrl2.Enable(habilitacion)
        #self.grid1.Enable(habilitacion)

    def habilitaBloque3(self,habilitacion=True):
        #tercera mitad
        self.choice1.Enable(habilitacion)
        self.textCtrl14.Enable(habilitacion)
        self.textCtrl3.Enable(habilitacion)
        self.comboBox1.Enable(habilitacion)
        self.button7.Enable(habilitacion)
        self.radioButton1.Enable(habilitacion)
        self.textCtrl9.Enable(habilitacion)
        self.radioButton2.Enable(habilitacion)
        self.button6.Enable(habilitacion)
        self.textCtrl10.Enable(habilitacion)
        self.textCtrl11.Enable(habilitacion)
        self.datePickerCtrl1.Enable(habilitacion)
        self.button2.Enable(habilitacion)
        self.OnRadioButton1(None)

    def ajustarAnchoColumnas(self):
        for y in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(y,True)

    def crearGrilla(self):
        columnas = ['Sucursal','a 30 dias','a 60 dias','a 90 dias','mayor\na 90','Actual','Subtotal']
        self.grid1.CreateGrid(4,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)

        self.ajustarAnchoColumnas()
        self.grid1.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid1.EnableEditing(False)
        self.grid1.Refresh()

    def OnSalir(self, event):
        self.Close()

    def OnBuscar(self, event):
        if self.button1.GetLabel()=="Procesar":
            self.buscarDeuda(self.textCtrl1.GetLabel())
            return
        if self.textCtrl1.GetLabel()=="" and self.textCtrl2.GetLabel()=="":
            utiles.mensaje(None,"Debe introducir numero de cliente o nombre")
            self.textCtrl1.SetFocus()
            return
        if len(self.textCtrl1.GetLabel())>0:
            consultaSQL = "SELECT nombre,direccion,telefono FROM cliente WHERE idcliente='"+self.textCtrl1.GetLabel()+"'"
            resultado = consultasBD.ordenCrudaDict(consultaSQL)
            if resultado == () or resultado == None:
                utiles.mensaje(None,"Numero no encontrado")
                self.textCtrl1.SetLabel("")
                self.textCtrl2.SetLabel("")
                self.textCtrl1.SetFocus()
                return
            self.textCtrl2.SetLabel(resultado[0]["nombre"])
            self.textCtrl12.SetLabel(resultado[0]["direccion"])
            self.textCtrl13.SetLabel(resultado[0]["telefono"])
            self.textCtrl1.SetEditable(False)
            self.textCtrl2.SetEditable(False)
            self.button1.SetLabel("Procesar")
            self.datePickerCtrl2.SetFocus()
            return

        r1 = "SELECT idcliente,nombre,direccion,telefono FROM cliente "
        r2 = "WHERE nombre LIKE '%"+self.textCtrl2.GetLabel()+"%' ORDER BY nombre"
        consultaSQL = r1 + r2
        resultado = consultasBD.ordenCrudaDict(consultaSQL)
        if resultado == () or resultado == None or len(resultado)==0:
            utiles.mensaje(None,"No se encontraron clientes con el nombre especificado")
            self.textCtrl1.SetLabel("")
            self.textCtrl2.SetLabel("")
            self.textCtrl1.SetFocus()
            return
        if len(resultado)>1:
            import BuscarClientes
            dlg = BuscarClientes.Dialog1(self,resultado)
            try:
                dlg.ShowModal()
            finally:
                if dlg.seleccion == "":
                    return
                clientes = dlg.seleccion
                dlg.Destroy()
        else:
            clientes = resultado[0]
        self.textCtrl1.SetLabel(clientes["idcliente"])
        self.textCtrl2.SetLabel(clientes["nombre"])
        self.textCtrl12.SetLabel(clientes["direccion"])
        self.textCtrl13.SetLabel(clientes["telefono"])
        self.textCtrl1.SetEditable(False)
        self.textCtrl2.SetEditable(False)
        self.button1.SetLabel("Procesar")
        self.datePickerCtrl2.SetFocus()
        self.comboBox1.SetFocus()
        return

    def OnLimpiar(self, event):
        self.textCtrl1.SetLabel("")
        self.textCtrl2.SetLabel("")
        self.textCtrl3.SetLabel("")
        self.textCtrl9.SetLabel("")
        self.textCtrl10.SetLabel("")
        self.textCtrl11.SetLabel("")
        self.textCtrl12.SetLabel("")
        self.textCtrl13.SetLabel("")
        self.textCtrl14.SetLabel("")
        self.choice1.SetSelection(0)
        self.textCtrl1.SetEditable(True)
        self.textCtrl2.SetEditable(True)
        self.button1.SetLabel("Buscar")
        self.grid1.ClearGrid()
        self.textCtrl1.SetFocus()
        self.habilitaBloque1(False)
        self.habilitaBloque2(True)
        self.habilitaBloque3(False)
        self.textCtrl1.SetFocus()

    def OnFocus(self, event):
        self.textCtrl1.SetFocus()

    def comboSucursales(self):
        sucursal = utiles.getSucursalActiva()
        SQL = "SELECT nombre FROM sucursales WHERE codsucursal='%s'" % (sucursal)
        resultado = consultasBD.ordenCrudaDict(SQL)
        self.comboBox1.SetLabel(resultado[0]["nombre"])
        self.comboBox2.SetLabel(resultado[0]["nombre"])
        SQL = "SELECT nombre FROM sucursales"
        resultado = consultasBD.ordenCrudaDict(SQL)
        for item in resultado:
            self.comboBox1.Append(item["nombre"])
            self.comboBox2.Append(item["nombre"])
        misucursal = int(sucursal)-1
        self.comboBox1.SetLabel(self.comboBox1.GetItems()[misucursal])
        self.comboBox1.SetValue(self.comboBox1.GetItems()[misucursal])
        self.comboBox1.SetSelection(misucursal)
        self.comboBox1.SetEditable(False)
        self.comboBox2.SetLabel(self.comboBox1.GetItems()[misucursal])
        self.comboBox2.SetValue(self.comboBox1.GetItems()[misucursal])
        self.comboBox2.SetSelection(misucursal)
        self.comboBox2.SetEditable(False)
        
    def OnSucuVendedoraCombobox(self, event):
        nombre = self.comboBox2.GetValue()
        SQL = "SELECT codsucursal FROM sucursales WHERE nombre='%s'" % (nombre)
        resultado = consultasBD.ordenCrudaDict(SQL)
        self.comboBox3.SetValue("")
        self.cargarComboVendedora()

    def cargarComboVendedora(self):
        nombre = self.comboBox2.GetLabel()
        SQL = "SELECT codsucursal FROM sucursales WHERE nombre='"+nombre+"'"
        resultado = consultasBD.ordenCrudaDict(SQL)
        sucursal = resultado[0]["codsucursal"]
        self.comboBox3.Clear()
        SQL = "SELECT * FROM vendedoras WHERE sucursal='%s'" % (sucursal)
        resultado = consultasBD.ordenCrudaDict(SQL)
        for item in resultado:
            self.comboBox3.Append(item["nombre"])
        self.comboBox3.SetEditable(False)
        self.comboBox3.SetFocus()

    def OnAceptar1(self, event):
        if self.comboBox3.GetLabel()=="":
            utiles.mensaje(None,"Debe seleccionar un usuario")
            self.comboBox3.SetFocus()
            return
        self.habilitaBloque1(False)
        self.habilitaBloque2(True)
        self.habilitaBloque1(False)
        self.textCtrl1.SetFocus()

    def OnCambiaFechaProceso(self, event):
        #buscar deuda a partir de la fecha indicada
        self.buscarDeuda(self.textCtrl1.GetLabel())

    def calculoDeFechas(self):
        self.fecha1 = str(utiles.invertirFecha(self.datePickerCtrl2.GetLabel()))
        self.fecha2 = str(utiles.sumarDiasAFecha(utiles.strToDate(self.fecha1),-30))
        self.fecha3 = str(utiles.sumarDiasAFecha(utiles.strToDate(self.fecha1),-31))
        self.fecha4 = str(utiles.sumarDiasAFecha(utiles.strToDate(self.fecha1),-60))
        self.fecha5 = str(utiles.sumarDiasAFecha(utiles.strToDate(self.fecha1),-61))
        self.fecha6 = str(utiles.sumarDiasAFecha(utiles.strToDate(self.fecha1),-90))
        self.a30 = " vtas_ctasctes.vencimiento BETWEEN '"+self.fecha2+"'"+" AND "+"'"+self.fecha1+"' "
        self.a60 = " vtas_ctasctes.vencimiento BETWEEN '"+self.fecha4+"'"+" AND "+"'"+self.fecha3+"' "
        self.a90 = " vtas_ctasctes.vencimiento BETWEEN '"+self.fecha6+"'"+" AND "+"'"+self.fecha5+"' "
        self.m90 = " vtas_ctasctes.vencimiento < '"+self.fecha6+"' "
        self.actual = " vtas_ctasctes.vencimiento > '"+self.fecha1+"' "
        print "A 30 dias: "+self.fecha2+" / "+self.fecha1
        print "A 60 dias: "+self.fecha4+" / "+self.fecha3
        print "A 90 dias: "+self.fecha6+" / "+self.fecha5
        print "Mas de 90: "+self.fecha6
        print "Periodo actual: "+self.fecha1
        print

    def consultasSQL(self,periodo,indice,idcliente):
        r1 = "SELECT paso3.idcliente, nombre, telefono, deuda "
        r2 = "FROM (SELECT paso2.idcliente, SUM(montocuota-montopagado) AS deuda "
        r3 = "      FROM (SELECT paso1.idcliente "
        r4 = "            FROM (SELECT idcliente,sum(montocuota) AS cuota,sum(montopagado) AS pagado "
        r5 = "                  FROM vtas_ctasctes "
        r6 = "                  WHERE vtas_ctasctes.idcliente='"+idcliente+"' "
        r7 = "                  GROUP BY vtas_ctasctes.idcliente) as paso1 "
        r8 = "            WHERE cuota-pagado<>0) as paso2, vtas_ctasctes "
        r9 = "      WHERE paso2.idcliente = vtas_ctasctes.idcliente AND (montocuota-montopagado)<>0 AND "+periodo
        r0 = "      GROUP BY paso2.idcliente) AS paso3, cliente "
        ra = "WHERE paso3.idcliente=cliente.idcliente ORDER BY nombre ASC"
        consultaSQL = r1 + r2 + r3 + r4 + r5 + r6 + r7 + r8 + r9 + r0 + ra
        resultado,conecta = consultasBD.ordenCrudaRemota(consultaSQL,indice)
        if not conecta:
            resultado = ()
        return resultado,conecta

    def llenarGrilla(self,indice,resultado,conecta,columna):
        if not conecta:
            self.grid1.SetCellValue(indice,0,"sin conexion")
            return
        else:
            nombreSucursal = self.comboBox2.GetItems()[indice]
            self.grid1.SetCellValue(indice,0,nombreSucursal)
        valor = 0
        if resultado<>():
            valor = resultado[0][3]
        #Sucursal,a 30 dias,a 60 dias,a 90 dias,mayor\na 90,Actual,Subtotal
        self.grid1.SetCellValue(indice,columna,str(valor))
        self.grid1.SetCellAlignment(indice,columna,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)

    def buscarDeuda(self,idcliente):
        print "Buscando deuda de ",idcliente
        print "Desde fecha: ",self.datePickerCtrl2.GetLabel()
        self.calculoDeFechas()
        total = 0
        for indice in xrange(len(self.comboBox2.GetItems())):
            conecta = True
            print "-----------------------------------------------------------"
            if conecta: 
                print "Procesando a 30 dias >",
                resultado,conecta = self.consultasSQL(self.a30,indice,idcliente)
                self.llenarGrilla(indice,resultado,conecta,1)
            if conecta: 
                print "Procesando a 60 dias >",
                resultado,conecta = self.consultasSQL(self.a60,indice,idcliente)
                self.llenarGrilla(indice,resultado,conecta,2)
            if conecta: 
                print "Procesando a 90 dias >",
                resultado,conecta = self.consultasSQL(self.a90,indice,idcliente)
                self.llenarGrilla(indice,resultado,conecta,3)
            if conecta: 
                print "Procesando mas de 90 dias >",
                resultado,conecta = self.consultasSQL(self.m90,indice,idcliente)
                self.llenarGrilla(indice,resultado,conecta,4)
            if conecta:
                print "Procesando vencimientos futuros >",
                resultado,conecta = self.consultasSQL(self.actual,indice,idcliente)
                self.llenarGrilla(indice,resultado,conecta,5)
            if conecta:
                subtotal = Decimal("0.00").quantize(Decimal("0.00"))
                for i in xrange(5):
                    subtotal+= Decimal(self.grid1.GetCellValue(indice,i+1)).quantize(Decimal("0.00"))
                total+=subtotal
                self.grid1.SetCellValue(indice,6,str(subtotal))
                self.grid1.SetCellAlignment(indice,6,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)

        #self.textCtrl3.SetLabel(str(total))
        self.OnCambiaSucursal(None)
        self.textCtrl11.SetLabel("0.00")
        self.ajustarAnchoColumnas()
        self.habilitaBloque1(False)
        self.habilitaBloque2(False)
        self.habilitaBloque3(True)
        self.comboBox1.SetFocus()

    def OnKillFocus(self, event):
        self.button1.SetFocus()

    def OnCambiaSucursal(self, event):
        sucursal = self.comboBox1.GetLabel()
        deudavieja = "0.00"
        for i in xrange(self.grid1.GetNumberRows()):
            if sucursal == self.grid1.GetCellValue(i,0):
                deudavieja = self.grid1.GetCellValue(i,6)
                break
        self.textCtrl3.SetLabel(deudavieja)
        self.choice1.SetFocus()
        if self.textCtrl9.GetLabel()<>"" or self.textCtrl10.GetLabel()<>"":
            self.OnCalcular(None)

    def OnCalcular(self, event):
        if self.choice1.GetLabel()=="Recargo":
            factor = Decimal("1.00")
        else:
            factor = Decimal("-1.00")
        if self.radioButton1.GetValue():
            if self.textCtrl9.GetLabel()<>"":
                try:
                    porcentaje = Decimal(self.textCtrl9.GetLabel()).quantize(Decimal("0.00"))
                except:
                    self.textCtrl9.SetLabel("")
                    self.textCtrl9.SetFocus()
                    return
                deudavieja = Decimal(self.textCtrl3.GetLabel()).quantize(Decimal("0.00"))
                try:
                    diferencia = Decimal(str(deudavieja*porcentaje/Decimal("100.00"))).quantize(Decimal("0.00"))
                except:
                    diferencia = Decimal("0.00")
                deudanueva = Decimal(str(deudavieja+diferencia*factor)).quantize(Decimal("0.00"))
                self.textCtrl10.SetLabel(str(diferencia))
                self.textCtrl11.SetLabel(str(deudanueva))
            else:
                self.textCtrl9.SetLabel("")
                self.textCtrl9.SetFocus()
        else:
            if self.textCtrl10.GetLabel()<>"":
                try:
                    diferencia = Decimal(self.textCtrl10.GetLabel()).quantize(Decimal("0.00"))
                except:
                    self.textCtrl10.SetLabel("")
                    self.textCtrl10.SetFocus()
                    return
                deudavieja = Decimal(self.textCtrl3.GetLabel()).quantize(Decimal("0.00"))
                deudanueva = Decimal(str(deudavieja+diferencia*factor)).quantize(Decimal("0.00"))
                try:
                    porcentaje = Decimal(str(diferencia / deudavieja * Decimal("100.00"))).quantize(Decimal("0.00"))
                except:
                    porcentaje = Decimal("0.00")
                self.textCtrl9.SetLabel(str(porcentaje))
                self.textCtrl11.SetLabel(str(deudanueva))
            else:
                self.textCtrl10.SetLabel("")
                self.textCtrl10.SetFocus()

        self.datePickerCtrl1.SetFocus()

    def OnRadioButton1(self, event):
        if self.radioButton1.GetValue():
            self.textCtrl9.Enable(True)
            self.textCtrl10.Enable(False)
        else:
            self.textCtrl9.Enable(False)
            self.textCtrl10.Enable(True)

    def OnRadioButton2(self, event):
        self.OnRadioButton1(None)

    def OnAceptar(self, event):
        if self.textCtrl14.GetLabel()=="":
            utiles.mensaje(None,"Debe ingresar una descripcion")
            self.textCtrl14.SetFocus()
            return
        self.OnCalcular(None)
        if self.textCtrl10.GetLabel()=="" or self.textCtrl10.GetLabel()=="0.00":
            utiles.mensaje(None,"Debe informar monto")
            self.button2.SetFocus()
            return
        #se graba recargo/descuento en archivo
        nombresucursal = self.comboBox1.GetLabel()
        sucursal = "0"
        for i,dato in enumerate(self.comboBox1.GetItems()):
            if nombresucursal == dato:
                sucursal = str(i)
                break
        usuario = self.comboBox3.GetLabel()
        fecha = utiles.obtenerFecha("Y-m-d h:m:s")
        idcliente = self.textCtrl1.GetLabel()
        nombre = self.textCtrl2.GetLabel()
        if self.choice1.GetLabel()=="Recargo":
            tipooperacion = "RECA"
        else:
            tipooperacion = "DESC"
        fechaoperacion = self.datePickerCtrl1.GetLabel()
        fechaoperacion = utiles.formatear_fecha_date3(str(fechaoperacion))+" 00:00:00"
        descripcion = self.textCtrl14.GetLabel()
        porcentaje = self.textCtrl9.GetLabel()
        valor = self.textCtrl10.GetLabel()
        viejadeuda = self.textCtrl3.GetLabel()
        nuevadeuda = self.textCtrl11.GetLabel()
        aprobado = str("0")
        
        r1 = "vtas_ctasctes_ajustes(sucursal,usuario,fecha,idcliente,nombre,"
        r2 = "tipooperacion,fechaoperacion,descripcion,porcentaje,valor,"
        r3 = "viejadeuda,nuevadeuda,aprobado)"
        tablaSQL = r1+r2+r3
        r1 = "('"+sucursal+"','"+usuario+"','"+fecha+"','"+idcliente+"','"
        r2 = nombre+"','"+tipooperacion+"','"+fechaoperacion+"','"
        r3 = descripcion+"','"+porcentaje+"','"+valor+"','"+viejadeuda+"','"
        r4 = nuevadeuda+"','"+aprobado+"')"
        camposSQL = r1+r2+r3+r4
        id = consultasBD.executaInsertSQL(None,tablaSQL,camposSQL)
        print "Grabado",id,idcliente,self.textCtrl2.GetLabel()
        self.OnLimpiar(None)

    def OnHistoricoPagos(self, event):
        import ListadoPagosMigracion
        dlg = ListadoPagosMigracion.Dialog1(self,self.textCtrl1.GetLabel())
        try:
            dlg.ShowModal()
        finally:
            dlg.Destroy() 
